package org.dezenho.client.RN;

import java.awt.Point;

import org.dezenho.client.IU.AdivinhadorObserver;
import org.dezenho.client.SO.DezenhoClient;

/**
 * Classe responsavel por controlar o adivinhador e as acoes associadas a ele
 * 
 * @author marcelasobrinhopereira
 * 
 */
public class Adivinhador implements AdivinhadorSubject{

	private AdivinhadorObserver adivinhadorObserver;
	private String palavra;
	boolean acerto = false;
	int tempoRestante;
	Point[] desenho;
	
	/**
	 * Metodo responsavel por atualizar o adivinhador com o tempo restante e o desenho vindo desenhista
	 * @param tempoRestante
	 * @param desenho
	 * @return acerto
	 */
	public boolean atualizaAdivinhador(int tempoRestante, Point[] desenho) {
		setDesenho(desenho);
		setTempoRestante(tempoRestante);
		notifyTempoDesenho();
		return getAcerto();
	}

	/**
	 * 
	 * Metodo responsavel trocar a tela atual pela tela de Adivinhador e
	 * inicia-la com os parametros fornecidos
	 * 
	 * @param tempoTotal
	 * @param palavra
	 * @param multiplicador
	 */
	public void inicializaAdivinhador(int tempoTotal, String palavra,
			int multiplicador) {
		setAcerto(false);
		setPalavra(palavra);
		DezenhoClient.getInstance().getDezenhoTelaClient().
			inicializaTelaAdivinhador(tempoTotal, multiplicador);
	}
	
	/**
	 * Verifica se a palavra enviada pelo adivinhador confere com a palavra da rodada
	 * Caso a palavra esteja correta, seta o acerto
	 * @param palavraEnviada
	 */
	public void verificaPalavraEnviada(String palavraEnviada){
		setAcerto(getPalavra().equals(palavraEnviada));
	}

	/**
	 * Metodo responsavel por notificar a tela que o desenho foi modificado
	 *  Metodo do padrao observer
	 */
	public void notifyTempoDesenho(){
		getAdivinhadorObserver().updateTempoDesenho();
	}
	
	//Metodos de acesso 
	
	public boolean getAcerto() {
		return acerto;
	}

	public void setAcerto(boolean acerto) {
		this.acerto = acerto;
	}

	public String getPalavra() {
		return palavra;
	}

	public void setPalavra(String palavra) {
		this.palavra = palavra;
	}

	public int getTempoRestante() {
		return tempoRestante;
	}

	public void setTempoRestante(int tempoRestante) {
		this.tempoRestante = tempoRestante;
	}

	public Point[] getDesenho() {
		return desenho;
	}

	public void setDesenho(Point[] desenho) {
		this.desenho = desenho;
	}

	public void setAdivinhadorObserver(AdivinhadorObserver adivinhadorObserver) {
		this.adivinhadorObserver = adivinhadorObserver;
	}

	public AdivinhadorObserver getAdivinhadorObserver() {
		return adivinhadorObserver;
	}

}
